課程資訊
課程名稱
程式語言:函數程式設計
Programming Languages: Functional Programming 
開課學期
110-2 
授課對象
管理學院  資訊管理學研究所  
授課教師
穆信成 
課號
IM2012 
課程識別碼
705 20600 
班次
 
學分
3.0 
全/半年
半年 
必/選修
選修 
上課時間
星期四2,3,4(9:10~12:10) 
上課地點
管二204 
備註
初選不開放。有意選修之同學請詳閱: https://forms.gle/D1xRpzijkgUe261fA
總人數上限:10人 
Ceiba 課程網頁
http://ceiba.ntu.edu.tw/1102IM2012_ 
課程簡介影片
 
核心能力關聯
核心能力與課程規劃關聯圖
課程大綱
為確保您我的權利,請尊重智慧財產權及不得非法影印
課程概述

「程式語言:函數程式設計(IM2012)」課程往年均在每學年上學期開設。本學年因課程調整,於下學期例外加開,但改採小班教學,預計收大約 10 位同學。採用講師給予授權碼的方式選課。

請有意選修此課程的同學填寫表單:
https://forms.gle/D1xRpzijkgUe261fA
講師將於初選截止前與您聯絡,告知是否選上。授權碼則將於開學後給予。

111-1 將再開「程式語言:命令程式設計(IM2013)」。下次開設「程式語言:函數程式設計」(大班制)則將是 112-1.

「程式語言:函數程式設計」課程梗概、往年講義等等等可參考:
https://scmu.github.io/plfp/

===================

本課程為「程式語言(Programming Languages)」系列課程之一,著眼點並不是教特定程式語言,而是以函數語言(functional language)為媒介,討論設計程式解決問題的思考方式、設計程式使用的數學與邏輯基礎、以及程式語言與形式符號在其中扮演的角色。其核心概念包括:

- 程式語言是一種形式語言,作為思考的工具。我們用程式語言表達概念,也用程式語言中的形式規則檢驗程式的正確性。

- 函數程設(functional programming)是一種相當簡化的程式設計模型。因為簡單,有更多易於掌握的性質,可作為討論程式語言的基礎。

- 有一整套程式設計理論奠基於歸納法(induction)之上。資料結構可用歸納法定義,其上的程式可用歸納寫成,關於該程式的性質也可用歸納法證明。與之相對的是餘歸納(coinduction).

- 上述兩種方法都不足以定義出所有程式 -- 為此我們將需要允許遞迴 (general recursion) 的模型. 然而,表達力變強大也意味著我們將失去一些好性質。

- 程式設計與定理證明是密切相關、相輔相成的活動。

- 函數語言這樣的簡單模型允許我們做等式推導,可作為一種程式設計方法 -- 將程式「算」出來。

- 好的型別系統常有「只要型別對,程式就會對」的特性。

- 型別系統與邏輯有密切關係:邏輯陳述相當於型別,具有該型別的程式則是該邏輯陳述的證明。

- 型別系統能幫助我們確立程式的正確性,甚至輔助我們寫程式。

- 更強大的型別系統相當於更具表達力的邏輯。同樣地,邏輯變強大的同時,我們也犧牲掉一些好掌握的性質。  

課程目標
以函數語言為起點,瞭解程式語言在語法、語意、與實務面向的課題。  
課程要求
修過程式設計相關課程,有基礎程式設計能力。  
預期每週課後學習時數
 
Office Hours
 
指定閱讀
上課講義。 
參考書目
Programming in Haskell, by Graham Hutton.
Cambridge University Press, 2007

Introduction to Functional Programming using Haskell (2nd Edition), by Richard Bird.
Prentice Hall 1998  
評量方式
(僅供參考)
   
課程進度
週次
日期
單元主題
第1週
2/17  0. 概論 Overview
1. Haskell 簡介:值、函數、與型別。 Introduction to Haskell – Values, Functions, and Types. 
第2週
2/24  2. Haskell 簡介:單純資料型別、串列上之函數。 Introduction to Haskell – Simple Datatypes & Functions on Lists. 
第3週
3/03  延續上週主題。
 
第4週
3/10  練習:逆向工程程式設計
練習:「全麥程設」與 Caesar Cipher. 
第5週
3/17  3. 歸納定義與證明。 Definition and Proof by Induction.
 
第6週
3/24  延續上週主題。
 
第7週
3/31  4. Haskell 簡介: Type Classes 小記。 Introduction to Haskell – A Quick Note on Type Classes.
5. 簡單程式推導。 Simple Program Derivation 
第8週
4/07  期中考 
第9週
4/14  6. 無所不在的「摺」。 The Ubiquitous Fold. 
第10週
4/21  7. 型別與邏輯。 Types and Logic.
 
第11週
4/28  延續上週主題。
 
第12週
5/05  8. 一階邏輯與依值型別。 First Order Logic and Dependent Type.
 
第13週
5/12  延續上週主題。
 
第14週
5/19  9. 單子與副作用。 Monads and Effects.
 
第15週
5/26  延續上週主題。
 
第16週
6/02  期末考